package com.rengwuxian.coursecoroutines._4_flow

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.chunked
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlin.coroutines.EmptyCoroutineContext

/**
 * chunked()操作符
 * 给Flow的数据分块，输出一个新的、元素类型是List的Flow。每个List就是分块之后的数据。然后一块发送到下游。
 *
 * flow1.chunked(2) ：分成两个元素一组的List。
 * 输出如下：
 * chunked: [1, 2]
 * chunked: [3, 4]
 * chunked: [5]
 *
 *
 */
@OptIn(ExperimentalCoroutinesApi::class)
fun main() = runBlocking<Unit> {
  val scope = CoroutineScope(EmptyCoroutineContext)
  val flow1 = flowOf(1, 2, 3, 4, 5)
  scope.launch {
    flow1.chunked(2).collect { println("chunked: $it") }
  }
  delay(10000)
}